import tkinter as tk
from tkinter import ttk
from Crawler import Crawler
from Chart import Chart

"""
高子欣
"""
# 图形界面类
class GUI:
    def __init__(self):
        self.root = tk.Tk()
        self.root.title("懂车帝销量数据爬虫  成员：20231205410李星烨、20231205413张治国、20231203747高子欣、20231205412周天泽、20231205408慈龙升")
        self.root.geometry("1000x1000")

        # 创建Tab控件
        self.tab_control = ttk.Notebook(self.root)
        self.tab_control.pack(expand=1, fill="both")

        # 创建控制面板
        self.control_panel = ttk.Frame(self.tab_control)
        self.tab_control.add(self.control_panel, text="控制面板")

        # 创建按钮面板
        self.button_panel = ttk.Frame(self.control_panel)
        self.button_panel.pack(side=tk.TOP, fill=tk.X)

        # 创建月份选择框
        self.selected_month_var = tk.StringVar(value="2024年11月")
        self.month_combobox = ttk.Combobox(self.button_panel, textvariable=self.selected_month_var, state="readonly", width=12)
        self.month_combobox["values"] = ["2024年11月", "2024年10月", "2024年09月", "2024年08月", "2024年07月", "2024年06月"]
        self.month_combobox.pack(side=tk.LEFT, padx=5, pady=10)

        # 创建图表展示框架相关代码提前
        self.chart_tab = ttk.Frame(self.tab_control)
        self.tab_control.add(self.chart_tab, text="图表展示")
        self.chart_display_frame = ttk.Frame(self.chart_tab)
        self.chart_display_frame.pack(fill=tk.BOTH, expand=True)

        # 实例化爬虫类和图表类，此时self.chart_display_frame已经存在
        self.crawler = Crawler()
        self.chart = Chart(self.chart_display_frame)

        # 爬虫按钮
        self.crawl_button = tk.Button(self.button_panel, text="开始爬取数据", command=self.start_crawling)
        self.crawl_button.pack(side=tk.LEFT, padx=5, pady=10)

        # 生成扇形图按钮
        self.generate_chart_button = tk.Button(self.button_panel, text="生成扇形图", command=self.generate_pie_chart)
        self.generate_chart_button.pack(side=tk.LEFT, padx=5, pady=10)

        # 生成柱状图按钮
        self.generate_bar_chart_button = tk.Button(self.button_panel, text="生成柱状图", command=self.generate_bar_chart)
        self.generate_bar_chart_button.pack(side=tk.LEFT, padx=5, pady=10)

        # 退出按钮
        self.exit_button = tk.Button(self.button_panel, text="退出", command=self.exit_program)
        self.exit_button.pack(side=tk.LEFT, padx=5, pady=10)

        # 创建数据表格（Treeview）
        self.treeview = ttk.Treeview(self.control_panel, columns=("排名", "车名", "品牌/车型", "价格", "本月销量"), show="headings")
        self.treeview.heading("排名", text="排名")
        self.treeview.heading("车名", text="车名")
        self.treeview.heading("品牌/车型", text="品牌/机型")
        self.treeview.heading("价格", text="价格")
        self.treeview.heading("本月销量", text="本月销量")
        self.treeview.pack(fill=tk.BOTH, expand=True)

    def start_crawling(self):
        selected_month = self.selected_month_var.get()
        all_data = self.crawler.start_crawling(selected_month)
        self.display_data(all_data)



    def display_data(self, datas):
        # 清空Treeview
        for row in self.treeview.get_children():
            self.treeview.delete(row)
        # 在Treeview中显示数据
        if datas == []:
            self.treeview.insert("", "end",values=("爬取过程出错,请查看后台","","","",""))
        else:
            for data in datas:
                self.treeview.insert("", "end",
                                     values=(data["排名"], data["车名"], data["品牌/车型"], data["价格"], data["本月销量"]))

    def generate_pie_chart(self):
        data = self.crawler.all_data
        self.chart.plot_pie_chart(data)

    def generate_bar_chart(self):
        data = self.crawler.all_data
        self.chart.plot_bar_chart(data)

    def exit_program(self):
        self.root.quit()

    def run(self):
        self.root.mainloop()